package filter

import (
	"fmt"
	"strconv"

	"gorm.io/gorm"
)

const (
	ByDesc = "DESC"
	ByAsc  = "ASC"
)

// ApplyPagination applies pagination settings  //order: 因该使用创建filetr的时候使用的过滤字段
func (f *Filter) applyPagination(db *gorm.DB) *gorm.DB {
	// 从查询参数中获取 offset 和 limit
	offsetStr := f.ctx.Query("offset")
	limitStr := f.ctx.Query("limit")

	// 将 offset 和 limit 转换为 int 类型
	offset, _ := strconv.Atoi(offsetStr)
	limit, _ := strconv.Atoi(limitStr)

	if offset > 0 {
		db = db.Offset(offset)
	}
	if limit > 0 {
		db = db.Limit(limit)
	}

	order := f.ctx.Query("order")
	by := f.ctx.Query("by")

	// 检查order 是否在设置的列表里面
	switch by {
	case ByDesc, ByAsc:
	default:
		by = ByAsc
	}
	for _, f := range f.AllowedFields {
		if f == order {
			db = db.Order(fmt.Sprintf("%s %s", order, by))
		}
	}

	return db
}
